package com.wf.controller;

import cn.hutool.core.date.LocalDateTimeUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wf.constant.RedisConstant;
import com.wf.context.BaseContext;
import com.wf.domain.BookingInfo;
import com.wf.domain.MyFavorites;
import com.wf.dto.PageDTO;
import com.wf.service.BookingInfoService;
import com.wf.service.HousesInfoService;
import com.wf.service.MyFavoritesService;
import com.wf.utils.RedisUtil;
import com.wf.vo.HouseDetailsPageVO;
import com.wf.vo.HouseDetailsVO;
import com.wf.vo.PageResultVO;
import com.wf.vo.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 房屋信息接口
 *
 * @author mpk
 * @since 2024/8/3 13:48:42
 */
@RestController
@CrossOrigin
@RequestMapping("/app/house")
public class HouseController {

    /**
     * 房屋信息服务，用于获取房屋信息
     */
    @Resource
    HousesInfoService housesInfoService;

    @Autowired
    MyFavoritesService myFavoritesService;

    @Autowired
    BookingInfoService bookingInfoService;

    @Autowired
    RedisUtil redisUtil;

    /**
     * 分页获取房屋信息
     *
     * @param pageDTO 分页参数，包含页码和每页数量等信息
     * @return 房屋分页信息
     */
    @PostMapping("/page")
    public Result page(@RequestBody PageDTO pageDTO) {

        PageResultVO<HouseDetailsPageVO> housePageVO = housesInfoService.pageList(pageDTO);

        return Result.success(housePageVO);
    }

    /**
     * 根据合同ID获取房屋信息
     * 此接口用于详细获取一个房屋的信息，包括是否被当前用户收藏和是否已预订
     *
     * @param contractId 房屋合同ID，用于查询特定房屋的详细信息
     * @return 返回包含房屋详细信息的Result对象，包括收藏和预订状态
     */
    @GetMapping("/{contractId}")
    public Result getHouse(@PathVariable String contractId) {
        // 通过合同ID获取房屋详细信息
        HouseDetailsVO houseDetailsVO = housesInfoService.getHouseDetail(contractId);

        // 返回房屋详细信息
        return Result.success(houseDetailsVO);
    }


    /**
     * 用户id查询已签约
     *
     * @param userId 用户id
     * @return HouseDetailsVO
     */
    @GetMapping("/user/{userId}")
    public Result getHouseByUserId(@PathVariable Long userId) {


        List<HouseDetailsVO> houseDetailsVO = housesInfoService.getHouseByUserId(userId);

        return Result.success(houseDetailsVO);
    }

}

